ARD2  1.00 for Rev B. Hardware
Airbag Reference Demonstrator using MPC5604P
SBC_AL.h
Go to the documentation of this file.
00001 
00020 #ifndef SBC_AL_H_
00021 #define SBC_AL_H_
00022 /*
00023  **************************************************************
00024  * Defines, Macros and Typedefs 
00025  **************************************************************/
00026 /*** Constant Macros ***/
00027 /* Default Yes and No defines */
00028 #ifndef TRUE
00029 #define TRUE (1u)
00030 #endif
00031 #ifndef CLEAR
00032 #define CLEAR (0u)
00033 #endif
00034 
00035 #ifndef BITS_IN_BYTE
00036 #define BITS_IN_BYTE (8u)
00037 #endif
00038 #ifndef BYTES_IN_16
00039 #define BYTES_IN_16  (2u)
00040 #endif
00041 #ifndef BYTES_IN_32
00042 #define BYTES_IN_32  (4u)
00043 #endif
00044 #ifndef BIT_DEFINITION
00045 #define BIT_DEFINITION
00046 #define BIT0  (1u << 0u)
00047 #define BIT1  (1u << 1u)
00048 #define BIT2  (1u << 2u)
00049 #define BIT3  (1u << 3u)
00050 #define BIT4  (1u << 4u)
00051 #define BIT5  (1u << 5u)
00052 #define BIT6  (1u << 6u)
00053 #define BIT7  (1u << 7u)
00054 #define BIT8  (1u << 8u)
00055 #define BIT9  (1u << 9u)
00056 #define BIT10 (1u << 10)
00057 #define BIT11 (1u << 11)
00058 #define BIT12 (1u << 12)
00059 #define BIT13 (1u << 13)
00060 #define BIT14 (1u << 14)
00061 #define BIT15 (1u << 15)
00062 #define BIT16 (1u << 16)
00063 #define BIT17 (1u << 17)
00064 #define BIT18 (1u << 18)
00065 #define BIT19 (1u << 19)
00066 #define BIT20 (1u << 20)
00067 #define BIT21 (1u << 21)
00068 #define BIT22 (1u << 22)
00069 #define BIT23 (1u << 23)
00070 #define BIT24 (1u << 24)
00071 #define BIT25 (1u << 25)
00072 #define BIT26 (1u << 26)
00073 #define BIT27 (1u << 27)
00074 #define BIT28 (1u << 28)
00075 #define BIT29 (1u << 29)
00076 #define BIT30 (1u << 30)
00077 #define BIT31 (1u << 31)
00078 #endif
00079 
00080 /* Masks for Presence/absence of squibs */
00081 #define SQUIB_CH0_PRESENT (BIT0)
00082 #define SQUIB_CH0_ABSENT  (0u)
00083 #define SQUIB_CH1_PRESENT (BIT1)
00084 #define SQUIB_CH1_ABSENT  (0u)
00085 #define SQUIB_CH2_PRESENT (BIT2)
00086 #define SQUIB_CH2_ABSENT  (0u)
00087 #define SQUIB_CH3_PRESENT (BIT3)
00088 #define SQUIB_CH3_ABSENT  (0u)
00089 #define SQUIB_CH4_PRESENT (BIT4)
00090 #define SQUIB_CH4_ABSENT  (0u)
00091 #define SQUIB_CH5_PRESENT (BIT5)
00092 #define SQUIB_CH5_ABSENT  (0u)
00093 #define SQUIB_CH6_PRESENT (BIT6)
00094 #define SQUIB_CH6_ABSENT  (0u)
00095 #define SQUIB_CH7_PRESENT (BIT7)
00096 #define SQUIB_CH7_ABSENT  (0u)
00097 #define SQUIB_CH8_PRESENT (BIT8)
00098 #define SQUIB_CH8_ABSENT  (0u)
00099 #define SQUIB_CH9_PRESENT (BIT9)
00100 #define SQUIB_CH9_ABSENT  (0u)
00101 #define SQUIB_CH10_PRESENT (BIT10)
00102 #define SQUIB_CH10_ABSENT  (0u)
00103 #define SQUIB_CH11_PRESENT (BIT11)
00104 #define SQUIB_CH11_ABSENT  (0u)
00105 
00106 /* Masks for Presence/absence of Satellite sensors */
00107 #define SAT_CH0_SLOT0_PRESENT (BIT0)
00108 #define SAT_CH0_SLOT0_ABSENT  (0u)
00109 #define SAT_CH0_SLOT1_PRESENT (BIT1)
00110 #define SAT_CH0_SLOT1_ABSENT  (0u)
00111 #define SAT_CH0_SLOT2_PRESENT (BIT2)
00112 #define SAT_CH0_SLOT2_ABSENT  (0u)
00113 #define SAT_CH1_SLOT0_PRESENT (BIT3)
00114 #define SAT_CH1_SLOT0_ABSENT  (0u)
00115 #define SAT_CH1_SLOT1_PRESENT (BIT4)
00116 #define SAT_CH1_SLOT1_ABSENT  (0u)
00117 #define SAT_CH1_SLOT2_PRESENT (BIT5)
00118 #define SAT_CH1_SLOT2_ABSENT  (0u)
00119 #define SAT_CH2_SLOT0_PRESENT (BIT6)
00120 #define SAT_CH2_SLOT0_ABSENT  (0u)
00121 #define SAT_CH2_SLOT1_PRESENT (BIT7)
00122 #define SAT_CH2_SLOT1_ABSENT  (0u)
00123 #define SAT_CH2_SLOT2_PRESENT (BIT8)
00124 #define SAT_CH2_SLOT2_ABSENT  (0u)
00125 #define SAT_CH3_SLOT0_PRESENT (BIT9)
00126 #define SAT_CH3_SLOT0_ABSENT  (0u)
00127 #define SAT_CH3_SLOT1_PRESENT (BIT10)
00128 #define SAT_CH3_SLOT1_ABSENT  (0u)
00129 #define SAT_CH3_SLOT2_PRESENT (BIT11)
00130 #define SAT_CH3_SLOT2_ABSENT  (0u)
00131 
00132 /* Defines for Squibs not being fired */
00133 #define SQUIB_CH0_NOT_FIRED   CLEAR
00134 #define SQUIB_CH1_NOT_FIRED   CLEAR
00135 #define SQUIB_CH2_NOT_FIRED   CLEAR
00136 #define SQUIB_CH3_NOT_FIRED   CLEAR
00137 #define SQUIB_CH4_NOT_FIRED   CLEAR
00138 #define SQUIB_CH5_NOT_FIRED   CLEAR
00139 #define SQUIB_CH6_NOT_FIRED   CLEAR
00140 #define SQUIB_CH7_NOT_FIRED   CLEAR
00141 #define SQUIB_CH8_NOT_FIRED   CLEAR
00142 #define SQUIB_CH9_NOT_FIRED   CLEAR
00143 #define SQUIB_CH10_NOT_FIRED  CLEAR
00144 #define SQUIB_CH11_NOT_FIRED  CLEAR
00145 
00146 /* Defines for satellites not being crashed */
00147 #define SAT_CH0_SLOT0_NOT_CRASHED CLEAR
00148 #define SAT_CH0_SLOT1_NOT_CRASHED CLEAR
00149 #define SAT_CH0_SLOT2_NOT_CRASHED CLEAR
00150 #define SAT_CH1_SLOT0_NOT_CRASHED CLEAR
00151 #define SAT_CH1_SLOT1_NOT_CRASHED CLEAR
00152 #define SAT_CH1_SLOT2_NOT_CRASHED CLEAR
00153 #define SAT_CH2_SLOT0_NOT_CRASHED CLEAR
00154 #define SAT_CH2_SLOT1_NOT_CRASHED CLEAR
00155 #define SAT_CH2_SLOT2_NOT_CRASHED CLEAR
00156 #define SAT_CH3_SLOT0_NOT_CRASHED CLEAR
00157 #define SAT_CH3_SLOT1_NOT_CRASHED CLEAR
00158 #define SAT_CH3_SLOT2_NOT_CRASHED CLEAR
00159 
00160 /* Defines for satellites being crashed */
00161 #define SAT_CH0_SLOT0_CRASHED BIT0
00162 #define SAT_CH0_SLOT1_CRASHED BIT1
00163 #define SAT_CH0_SLOT2_CRASHED BIT2
00164 #define SAT_CH1_SLOT0_CRASHED BIT3
00165 #define SAT_CH1_SLOT1_CRASHED BIT4
00166 #define SAT_CH1_SLOT2_CRASHED BIT5
00167 #define SAT_CH2_SLOT0_CRASHED BIT6
00168 #define SAT_CH2_SLOT1_CRASHED BIT7
00169 #define SAT_CH2_SLOT2_CRASHED BIT8
00170 #define SAT_CH3_SLOT0_CRASHED BIT9
00171 #define SAT_CH3_SLOT1_CRASHED BIT10
00172 #define SAT_CH3_SLOT2_CRASHED BIT11
00173 
00174 /* Let's count stuff */
00175 #define SBC_N_SATELLITES_POSSIBLE  12u
00176 #define SBC_N_SQUIBS_POSSIBLE      12u
00177 #define SBC_SENSOR_DATA_ARRAY_SIZE 264u
00178 #define SBC_N_CONFIG_BUFFER_SIZE   60u
00179 
00180 
00181 /* Nominal values */
00182 #define SBC_FIRED_SQUIB_MIN_TIME 0x8u
00183 
00184 
00185 
00186 
00187 
00188 #define SBC_TEST_SBC_FAILED BIT14
00189 #define SBC_TEST_SAT_0 BIT0
00190 #define SBC_TEST_SAT_1 BIT1
00191 #define SBC_TEST_SAT_2 BIT2
00192 #define SBC_TEST_SAT_3 BIT3
00193 #define SBC_TEST_SAT_4 BIT4
00194 #define SBC_TEST_SAT_5 BIT5
00195 #define SBC_TEST_SAT_6 BIT6
00196 #define SBC_TEST_SAT_7 BIT7
00197 #define SBC_TEST_SAT_8 BIT8
00198 #define SBC_TEST_SAT_9 BIT9
00199 #define SBC_TEST_SAT_10 BIT10
00200 #define SBC_TEST_SAT_11 BIT11
00201 #define SBC_TEST_ALL_SAT (BIT12 - 1u)
00202 #define SBC_TEST_SQUIB_0 BIT16
00203 #define SBC_TEST_SQUIB_1 BIT17
00204 #define SBC_TEST_SQUIB_2 BIT18
00205 #define SBC_TEST_SQUIB_3 BIT19
00206 #define SBC_TEST_SQUIB_4 BIT20
00207 #define SBC_TEST_SQUIB_5 BIT21
00208 #define SBC_TEST_SQUIB_6 BIT22
00209 #define SBC_TEST_SQUIB_7 BIT23
00210 #define SBC_TEST_SQUIB_8 BIT24
00211 #define SBC_TEST_SQUIB_9 BIT25
00212 #define SBC_TEST_SQUIB_10 BIT26
00213 #define SBC_TEST_SQUIB_11 BIT27
00214 #define SBC_TEST_ALL_SQUIB (BIT28 - 1u)
00215 
00216 /*** Function Macros ***/
00217 #ifndef N_ELEMENTS
00218 #define N_ELEMENTS(X)           (sizeof(X)/sizeof(*(X)))
00219 #endif
00220 
00221 /*** Enums ***/
00222 
00223 /*** TypeDefs ***/
00224 
00225 /*
00226  **************************************************************
00227  * Declarations 
00228  **************************************************************/
00229 /*** Extern ***/
00230 /* Following global variable is used to show the latest time when an SBC */
00231 /* command has been scheduled.                                           */
00232 extern uint32_t gu32SBCTime;
00233 extern uint16_t gu16ActivePSI5Channels;
00234 extern uint16_t gu16ActiveSquibChannels;
00235 extern uint16_t gu16FiredSquibs;
00236 extern uint16_t gu16SquibsToFire;
00237 extern uint16_t gu16CrashedSatellites;
00238 extern uint16_t gu16ConfirmedSatellites;
00239 extern uint8_t gu8SBCSatelliteData[];
00240 /*** Globals ***/
00241 
00242 /*** Constants ***/
00243 extern const uint16_t cu16PresentSquibs;
00244 extern const uint16_t cu16PresentSatellites;
00245 
00246 /*
00247  **************************************************************
00248  * Function Prototypes 
00249  **************************************************************/
00250 /*
00251  ******************************************************************************
00252  *
00253  * Function:          u8fnSBCPreSchedulerEnableWarningLamp()
00254  *
00255  */
00264 uint8_t u8fnSBCPreSchedulerEnableWarningLamp(uint8_t u8Enable);
00265 /*
00266  ******************************************************************************
00267  *
00268  * Function:          u8fnSBCEnableWarningLamp()
00269  *
00270  */
00279 uint8_t u8fnSBCEnableWarningLamp(uint8_t u8Enable);
00280 /*
00281  ******************************************************************************
00282  *
00283  * Function:          vfnSBCPreSchedulerInit()
00284  *
00285  */
00293 void vfnSBCPreSchedulerInit(void);
00294 /*
00295  ******************************************************************************
00296  *
00297  * Function:          vfnCG147ToggleResetPin()
00298  *
00299  */
00307 void vfnSBCResetPin(uint32_t u32State);
00308 /*
00309  ******************************************************************************
00310  *
00311  * Function:          u8fnSBCInit()
00312  *
00313  */
00327 uint32_t u32fnSBCInit(void);
00328 /*
00329  ******************************************************************************
00330  *
00331  * Function:          u32fnSBCPerformInitialTests()
00332  *
00333  */
00351 uint32_t u32fnSBCPerformInitialTests(void);
00352 /*
00353  ******************************************************************************
00354  *
00355  * Function:          u32fnSBCSchedulePSISat()
00356  *
00357  */
00365 uint32_t u32fnSBCSchedulePSISat(uint16_t* pu16RawAccelArray);
00366 /*
00367  ******************************************************************************
00368  *
00369  * Function:          u8fnSBCSchedulePSync()
00370  *
00371  */
00380 uint8_t u8fnSBCSchedulePSync(void);
00381 /*
00382  ******************************************************************************
00383  *
00384  * Function:          u8fnSBCSyncSM()
00385  *
00386  */
00396 uint8_t u8fnSBCSyncSM(const uint8_t u8Period);
00397 /*
00398  ******************************************************************************
00399  *
00400  * Function:          u32fnSBCExtractPSISat()
00401  *
00402  */
00413 uint32_t u32fnSBCExtractPSISat(uint16_t* pu16RawAccelArray,
00414                                uint16_t* pu16Filtered);
00415 /*
00416  ******************************************************************************
00417  *
00418  * Function:          u32fnSBCScheduleCmd()
00419  *
00420  */
00430 uint32_t u32fnSBCScheduleCmd(uint8_t u8Cmd, uint8_t u8Arg,
00431                              uint16_t* pu16Response);
00432 /*
00433  ******************************************************************************
00434  *
00435  * Function:          u32fnSBCFireSquibs()
00436  *
00437  */
00446 uint32_t u32fnSBCFireSquibs(const uint16_t cu16SquibMask);
00447 /*
00448  ******************************************************************************
00449  *
00450  * Function:          u16fnSBCGatherPSI5SatelliteData()
00451  *
00452  */
00469 uint16_t u16fnSBCGatherPSI5SatelliteData(uint8_t* pu8PSI5Data);
00470 /*
00471  ******************************************************************************
00472  *
00473  * Function:          u16fnSBCTestPSI5SatelliteData()
00474  *
00475  */
00494 static uint16_t u16fnSBCTestPSI5SatelliteData(const uint8_t* au8SBCSatData,
00495                                               const uint8_t* au8SBCSatBasis,
00496                                               const uint8_t* au8SBCSatTestFilt,
00497                                               const uint16_t* pu16ActiveSat);
00498 /*
00499  ******************************************************************************
00500  *
00501  * Function:          u32fnSBCSquibFiringStatus()
00502  *
00503  */
00517 uint32_t u32fnSBCSquibFiringStatus(uint16_t* pu16Response);
00518 #endif /* SBC_AL_H_ */